home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 19.zip
/
BS1 part 19
/
PD 3.adf
/
Ani_Pointers
/
Pointerz.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-11-20
|
12KB
|
671 lines
/****************************************/
/* Pointerz */
/* - a little demo that uses */
/* SetPointer() to create four */
/* animated pointers. */
/* */
/* Blake Freymann 4/2/87 */
/* CIS 73657,67 */
/* */
/****************************************/
#include <intuall.h>
#define NUMWINS 4
struct IntuitionBase *IntuitionBase;
struct IntuiMessage *GetMsg();
struct IntuiMessage *message;
struct Window *OpenWindow();
struct InputEvent *Intuition();
struct Window *MyWindow[NUMWINS];
short i, mm, win;
ULONG Signals; /* for Wait() */
void findwindow();
/*******************************************************************/
/* Image Data (sprites) */
/*******************************************************************/
/* bird1.c */
UWORD Bird1Data[] =
{
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x07F0,0x0000,
0x0FF8,0x3000,
0x2FFC,0x57E0,
0x0FFE,0xF7F0,
0x07FA,0x83F0,
0x03FA,0x27F8,
0x01F8,0x19F8,
0x01F8,0x29F8,
0x01F8,0x01F8,
0x01F8,0x01F8,
0x0150,0x0150,
0x02A0,0x02A0,
0x0000,0x0000,
0x0000,0x0000
};
/* bird2.c */
UWORD Bird2Data[] =
{
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x07F0,0x0000,
0x0FF8,0x37F0,
0x2FFC,0x57F8,
0x0FFE,0xF7F8,
0x07FE,0x83FC,
0x01FE,0x25FE,
0x00FF,0x18FF,
0x0000,0x2800,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000
};
/* bird3.c */
UWORD Bird3Data[] =
{
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x001F,0x001F,
0x00FE,0x00FE,
0x07FE,0x03FE,
0x0FFC,0x37FC,
0x2FFC,0x57FC,
0x0FFE,0xF3F8,
0x07FA,0x8000,
0x0002,0x2400,
0x0000,0x1800,
0x0000,0x2800,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000
};
UWORD Bird4Data[] =
{
0x0000,0x0000,
0x03E0,0x03E0,
0x03F0,0x03F0,
0x01F8,0x01F8,
0x01F8,0x01F8,
0x01F8,0x01F8,
0x01F8,0x01F8,
0x01F8,0x01F8,
0x01F8,0x01F8,
0x07F0,0x03F0,
0x0FF0,0x33F0,
0x2FFE,0x50E0,
0x0FFC,0xF000,
0x07F0,0x8000,
0x0000,0x2400,
0x0000,0x1800,
0x0000,0x2800,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000
};
USHORT Face1Data[] =
{
0x0000,0x0000,
0x07C0,0x0000,
0x0FE0,0x0000,
0x1FF0,0x0000,
0x2388,0x1C70,
0x4104,0x3EF8,
0x0000,0x638C,
0x2288,0x638C,
0x8002,0x638C,
0xC106,0x3EF8,
0xE38E,0x1C70,
0xFFFE,0x0000,
0xF93E,0x0000,
0xF93E,0x0000,
0xFFFE,0x7838,
0x7FFC,0x3FF8,
0x77DC,0x1FF0,
0x783C,0x1FF0,
0x3FF8,0x0FE0,
0x1FF0,0x0380,
0x0FE0,0x0000,
0x07C0,0x0000,
0x0000,0x0000
};
USHORT Face2Data[] =
{
0x0000,0x0000,
0x07C0,0x0000,
0x0FE0,0x0000,
0x1FF0,0x0000,
0x2388,0x1C70,
0x4104,0x3EF8,
0x1860,0x7BEC,
0x3AE8,0x7BEC,
0x8002,0x638C,
0xC106,0x3EF8,
0xE38E,0x1C70,
0xFFFE,0x0000,
0xF93E,0x0000,
0xF93E,0x0000,
0xFFFE,0x0000,
0x7FFC,0x0FE0,
0x7FFC,0x1FF0,
0x783C,0x1FF0,
0x3FF8,0x0FE0,
0x1FF0,0x0380,
0x0FE0,0x0000,
0x0700,0x0000,
0x0000,0x0000
};
USHORT Face3Data[] =
{
0x0000,0x0000,
0x07C0,0x0000,
0x0FE0,0x0000,
0x1FF0,0x0000,
0x2388,0x1C70,
0x4104,0x3EF8,
0x0C30,0x6FBC,
0x1E78,0x5F7C,
0x8002,0x638C,
0xC106,0x3EF8,
0xE38E,0x1C70,
0xFFFE,0x0000,
0xF93E,0x0000,
0xF93E,0x0000,
0xFFFE,0x0000,
0x7FFC,0x0FE0,
0x7FFC,0x1C70,
0x783C,0x3FF8,
0x3FF8,0x3FF8,
0x1FF0,0x0380,
0x0FE0,0x0000,
0x07C0,0x0000,
0x0000,0x0000
};
USHORT Face4Data[] =
{
0x0000,0x0000,
0x07C0,0x0000,
0x0FE0,0x0000,
0x1FF0,0x0000,
0x2388,0x1C70,
0x4104,0x3EF8,
0x0410,0x679C,
0x0E38,0x4F3C,
0x8C32,0x6FBC,
0xC106,0x3EF8,
0xE38E,0x1C70,
0xFFFE,0x0000,
0xF93E,0x0000,
0xF11E,0x0280,
0xFFFE,0x0000,
0x7FFC,0x0FE0,
0x7FFC,0x1FF0,
0x7FFC,0x1830,
0x3838,0x1FF0,
0x1FF0,0x0FE0,
0x0FE0,0x0000,
0x07C0,0x0000,
0x0000,0x0000
};
USHORT Fish1Data[] =
{
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0xF800,0xF800,
0xF700,0xCF00,
0xE780,0xDF80,
0xC7C0,0xFFC0,
0xFFE0,0xFFE0,
0xFFF0,0xFFF0,
0x7FF0,0x0070,
0x7FF0,0x7FF0,
0x3FF0,0x01F0,
0x3FF0,0x3FF0,
0x1FE0,0x03E0,
0x0FC0,0x0FC0,
0x07FF,0x07FF,
0x007F,0x0003,
0x007E,0x007E,
0x007C,0x000C,
0x0078,0x0078,
0x0070,0x0030,
0x0060,0x0060,
0x0000,0x0000
};
USHORT Fish2Data[] =
{
0x0000,0x0000,
0xF800,0xF800,
0xFF00,0xFF00,
0xF780,0xCF80,
0xE7C0,0xDFC0,
0xC7E0,0xFFE0,
0xFFF0,0xFFF0,
0x7FF0,0x0070,
0x7FF0,0x7FF0,
0x3FF0,0x01F0,
0x3FFF,0x3FFF,
0x1FFF,0x0383,
0x0FFE,0x0FFE,
0x07FC,0x078C,
0x0078,0x0078,
0x0070,0x0030,
0x0060,0x0060,
0x0040,0x0040,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000
};
USHORT Fish3Data[] =
{
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x1F00,0x1F00,
0x7F80,0x7F80,
0xF7C0,0xEFC0,
0xE7C0,0xDFC0,
0xE7E0,0xDFE0,
0xDFF0,0xF870,
0xFFF0,0xE7F0,
0xFFF0,0x99F0,
0x7FF0,0x67F0,
0x3FF8,0x1BB8,
0x3FFE,0x27C6,
0x0FFF,0x0FBB,
0x007F,0x004F,
0x007C,0x003C,
0x0070,0x0070,
0x0060,0x0060,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000,
0x0000,0x0000
};
USHORT Fish4Data[] =
{
0x0000,0x0000,
0x0000,0x0000,
0x001F,0x001F,
0x00EF,0x00F3,
0x01E7,0x01FB,
0x03E3,0x03FF,
0x07FF,0x07FF,
0x0FFF,0x0FFF,
0x0FFE,0x0E00,
0x0FFE,0x0FFE,
0x0FFC,0x0F80,
0x0FFC,0x0FFC,
0x07F8,0x07C0,
0x03F0,0x03F0,
0xFFE0,0xFFE0,
0xFE00,0xC000,
0x7E00,0x7E00,
0x3E00,0x3000,
0x1E00,0x1E00,
0x0E00,0x0C00,
0x0600,0x0600,
0x0000,0x0000,
0x0000,0x0000
};
USHORT Dodo1Data[] =
{
0x0000,0x0000,
0x1FE0,0x1C00,
0x7E60,0x7F80,
0xFE70,0xFF80,
0xFFF0,0xFE00,
0x7FE0,0x7E00,
0x1FC0,0x1800,
0x1FF0,0x0000,
0x3FF8,0x0000,
0x3DF8,0x0200,
0x7CFC,0x0300,
0x79FC,0x0600,
0x73FC,0x0C00,
0x73FC,0x0C00,
0x7804,0x07F8,
0x3FF8,0x0000,
0x3FF8,0x0600,
0x1FF0,0x0C00,
0x1FE0,0x1800,
0xF83C,0xF83C,
0xA83A,0xA83A,
0x2C29,0x2C29,
0x0000,0x0000
};
USHORT Dodo2Data[] =
{
0x0000,0x0000,
0x0FF0,0x0C00,
0x1F30,0x1FC0,
0x7F38,0x7FC0,
0x7FF8,0x7F00,
0x3FF0,0x3F00,
0x0FE0,0x0C00,
0x07F0,0x0000,
0x3FF8,0x0000,
0x3DF8,0x0200,
0x7CFC,0x0300,
0x79FC,0x0600,
0x73FC,0x0C00,
0x73FC,0x0C00,
0x7804,0x07F8,
0x3FF8,0x0000,
0x3FF8,0x0200,
0x1FF0,0x0600,
0x1FF0,0x0C10,
0x1F7C,0x1F7C,
0x1554,0x1554,
0x1554,0x1554,
0x0000,0x0000
};
USHORT Dodo3Data[] =
{
0x0000,0x0000,
0x03FC,0x0300,
0x07CE,0x07F0,
0x1FCE,0x1FF0,
0x1FFE,0x1FC0,
0x0FFC,0x0F80,
0x03F8,0x0300,
0x07F0,0x0000,
0x3FF8,0x0000,
0x3DF8,0x0200,
0x7CFC,0x0300,
0x79FC,0x0600,
0x73FC,0x0C00,
0x73FC,0x0C00,
0x7804,0x07F8,
0x3FF8,0x0000,
0x3FF8,0x0200,
0x1FF0,0x0200,
0x1FF0,0x0200,
0x07F0,0x07F0,
0x05D0,0x05D0,
0x05D0,0x05D0,
0x0000,0x000
};
USHORT Dodo4Data[] =
{
0x0000,0x0000,
0x07FC,0x0000,
0x18E2,0x07FC,
0x18E2,0x07FC,
0x1FFE,0x01F0,
0x0FFC,0x03F8,
0x07F8,0x01F0,
0x0FF0,0x00E0,
0x3FF8,0x0040,
0x3FF8,0x0000,
0x7F3C,0x00C0,
0x7F3C,0x00C0,
0x7F7C,0x0080,
0x7EFC,0x0100,
0x7E04,0x01F8,
0x3FF8,0x0000,
0x3FF8,0x0000,
0x1FF0,0x0810,
0x3FF8,0x3008,
0x500A,0x500A,
0xA815,0xA815,
0x2414,0x2414,
0x0000,0x0000
};
/* four pointers - each pointer has four images */
UWORD *BirdData[]={Bird1Data,Bird2Data,Bird3Data,Bird4Data};
UWORD *FaceData[]={Face1Data,Face2Data,Face3Data,Face4Data};
UWORD *FishData[]={Fish1Data,Fish2Data,Fish3Data,Fish2Data};
UWORD *DodoData[]={Dodo1Data,Dodo2Data,Dodo3Data,Dodo4Data};
UWORD **Data[]={BirdData,FaceData,FishData,DodoData};
/*******************************************************************/
/* struct for all four windows. individual titles and pointerimage */
/* filled in below. */
/*******************************************************************/
struct NewWindow nw = {
0, 0, /* start position */
172, 40, /* width, height */
-1, -1, /* detail pen, block pen */
CLOSEWINDOW|MOUSEMOVE|ACTIVEWINDOW|INACTIVEWINDOW,
/* IDCMP flags */
WINDOWDEPTH|WINDOWCLOSE|REPORTMOUSE|ACTIVATE|WINDOWDRAG,
/* window flags */
NULL, /* pointer to first user gadget */
NULL, /* pointer to user checkmark */
NULL, /* window titles filled in below */
NULL, /* pointer to screen */
NULL, /* pointer to superbitmap */
0,0,0,0, /* UNsized window */
WBENCHSCREEN /* type of screen in which to open */
};
main()
{
if ((IntuitionBase = (struct IntuitionBase *)
OpenLibrary("intuition.library", 0)) == 0){
printf("Couldn't open intuition.library!");
mycleanup();
}
/*******************************************************************/
/* fill in each window position and title, and open it. */
/*******************************************************************/
for (win=0;win<NUMWINS;++win){
switch(win){
case(0):
nw.LeftEdge=40;
nw.TopEdge=40;
nw.Title="BirdPointer";
break;
case(1):
nw.LeftEdge=nw.LeftEdge+nw.Width+10;
nw.Title="FacePointer";
break;
case(2):
nw.LeftEdge=40;
nw.TopEdge=nw.TopEdge+50;
nw.Title="FishPointer";
break;
case(3):
nw.LeftEdge=nw.LeftEdge+nw.Width+10;
nw.Title="DodoPointer";
break;
default:
break;
}
if ((MyWindow[win] = (struct Window *)OpenWindow(&nw))==0){
printf("Couldn't open a window.");
mycleanup();
}
}
/* start with Dodo window active */
win=3;
SetPointer(MyWindow[win],Data[win][i],21,16,0,-7);
/*******************************************************************/
/* forever deal with mouse activities */
/*******************************************************************/
for(;;){
Wait(1<<MyWindow[win]->UserPort->mp_SigBit);
while (message=GetMsg(MyWindow[win]->UserPort)){
switch(message->Class){
case(CLOSEWINDOW):
ReplyMsg(message);
mycleanup();
break;
case(MOUSEMOVE):
mm=1;
ReplyMsg(message);
break;
case(INACTIVEWINDOW): /* mouse clicked elsewhere! */
ReplyMsg(message);
findwindow();
break;
default:
ReplyMsg(message);
break;
}
}
/*******************************************************************/
/* no more messages - if mouse moved, change the pointer image! */
/*******************************************************************/
if(mm==1){
i=(i+1)%4;
SetPointer(MyWindow[win],Data[win][i],21,16,0,-7);
mm=0;
}
} /*for(;;)*/
} /*main*/
/*******************************************************************/
/* Wait until mouse is clicked on one of our windows. */
/*******************************************************************/
void findwindow(){
for(;;){
Signals=Wait((1 << MyWindow[0]->UserPort->mp_SigBit)|
(1 << MyWindow[1]->UserPort->mp_SigBit)|
(1 << MyWindow[2]->UserPort->mp_SigBit)|
(1 << MyWindow[3]->UserPort->mp_SigBit));
for(win=0;win<NUMWINS;++win){
while((Signals)&(1 << MyWindow[win]->UserPort->mp_SigBit)){
if(((message=GetMsg(MyWindow[win]->UserPort))->Class)==ACTIVEWINDOW){
ReplyMsg(message);
return;
}
else ReplyMsg(message);
}
}
}/*for(;;)*/
}/*findwindow()*/
/*******************************************************************/
/* Clean up loose ends (most done by intuition?) */
/*******************************************************************/
mycleanup(){
for(win=0;win<NUMWINS;win++){
while(message=GetMsg(MyWindow[win]->UserPort))ReplyMsg(message);
ClearPointer(MyWindow[win]);
if (MyWindow[win]) CloseWindow(MyWindow[win]);
}
if (IntuitionBase) CloseLibrary (IntuitionBase);
exit();
}